﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace Sinacor.Infra.Common.Security.Authentication.Credentials
{
    /// <summary>
    /// Classe responsavel pelo armazenamento das informações do usuário e estação de trabalho.
    /// </summary>
    public class CredentialRepository
    {
        private static CredentialRepository _instance;

        /// <summary>
        /// Construtor
        /// </summary>
        private CredentialRepository()
        {
            UserInfo = new SinacorUserInfo();
        }
        private string _sIp = "";
        private string _sHostName = "";

        public SinacorUserInfo UserInfo { get; set; }

        public string Ip { 
            get
            {
                if (String.IsNullOrEmpty(_sIp))
                {

                    //Lista o Ip da máquina
                    IPAddress[] ips = Dns.GetHostAddresses(HostName);
                    //Se conseguir listar o ip, renomeia o hostname com o nome do Ip.
                    if (ips != null && ips.Length > 0)
                        _sIp = ips[0].ToString();
                }
                return _sIp;
            }
        }

        public string HostName 
        {
            get
            {
                if (String.IsNullOrEmpty(_sHostName))
                    //Descobre o nome da máquina
                    _sHostName = System.Net.Dns.GetHostName();

                return _sHostName;
            }
        }

        public static CredentialRepository GetInstance()
        {
            if (_instance == null)
                _instance = new CredentialRepository();
            
            return _instance;
        }

    }
}
